!*********************************************************
!    block size 数据输入输出函数库
!*********************************************************
! get_nrow_sub(infile,n) 返回文件的行数
! READ_NXK_SUB(INFILE,N,K,DAT) 输入N行K列数据到DAT
! write_nxk_sub(outfile,n,k,dat) 输出N行K列数据到outfile 
!*********************************************************
!    获取文本文件中行数 N
 subroutine get_nrow_sub(infile,n)
 character*(*) infile
 integer n
 character str
 integer sta,nut
 n=-1
 call open_or_not(nut)
 open(nut,file=infile,iostat=sta)
 do 
   if(sta.lt.0) exit
   read(nut,*,iostat=sta) str
   n=n+1
 enddo
 close(nut)
 end subroutine
!*****************************************
!  从文本文件中读入 N行xK列 数据
 SUBROUTINE READ_NXK_SUB(INFILE,N,K,DAT)
 CHARACTER*(*) INFILE
 INTEGER N,K
 REAL DAT(N,K)
 INTEGER I,J,NUT,STA
 CALL OPEN_OR_NOT(NUT)
 OPEN(NUT,FILE=INFILE,IOSTAT=STA)
 DO I=1,N
    READ(NUT,*) (DAT(I,J),J=1,K)
 ENDDO
 CLOSE(NUT)
 END SUBROUTINE
!***********************************************
!    输出到文件N X K 数据 outfile
  subroutine write_nxk_sub(outfile,n,k,dat)
  character*(*) outfile
 integer n,k
 integer nut 
    real dat(n,k)
    call open_or_not(nut)
    open(nut,file=outfile)
     do i=1,n
   write(nut,*) (dat(i,j),j=1,k)
     enddo
    close(nut)
  end subroutine
!***********************************************
!**** this is the end of block.f90 *************
!***********************************************
